/*
 * DrawLinesCommand.hpp
 *
 *  Created on: 21/12/2011
 *      Author: Tales
 */

#ifndef DRAWLINESCOMMAND_HPP_
#define DRAWLINESCOMMAND_HPP_

#include "Command.hpp"
#include <vector>
#include <iterator>

namespace yep
{

/**
 * @brief Comando gerado pelas ferramentas PencilTool e LinesTool.
 */
class DrawLinesCommand: public Command
{
public:
	/**
	 * @brief Construtor
	 * @param positions_ As posições dos vértices
	 * @param color a cor do editor no momento da criação do comando
	 * @param layer a camada selecionada do editor no momento da criação do comando
	 */
	DrawLinesCommand(const vector<pair<int, int> >&positions_
			, const Color &color_, int layer_);

	/**
	 * @brief Construtor
	 * @param begin A posição do primeiro elemento
	 * @param end A posição do elemento após o último
	 * @param color a cor do editor no momento da criação do comando
	 * @param layer a camada selecionada do editor no momento da criação do comando
	 */
	template<class InputIterator>
	DrawLinesCommand(InputIterator first, InputIterator last,
			const Color &color_, int layer_);

	void execute(PictureState &picture);

private:
	vector<pair<int, int> > positions;
};

}

template<class InputIterator> inline yep::DrawLinesCommand::DrawLinesCommand(
		InputIterator first, InputIterator last, const Color & color_,
		int layer_) :
		Command(color_, layer_), positions(first, last)
{
}

/* namespace yep */
#endif /* DRAWLINESCOMMAND_HPP_ */
